package com.cps.data.jpa.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.NoRepositoryBean;

import javax.persistence.EntityManager;
import java.io.Serializable;
import java.util.List;

/**
 * Created by Jensen on 2016/9/28.
 */
@NoRepositoryBean
public interface BaseDao<T,ID extends Serializable> extends JpaRepository<T, ID>,JpaSpecificationExecutor<T> {


    //通过HQL语句查询

    /**
     * 查询Hql
     * @param hql
     * @return 返回查询结果
     */
    List selectByHql(String hql);

    /**
     * 查询Hql
     * @param hql
     * @param params 查询参数
     * @return 返回查询结果
     */
    List selectByHql(String hql,Object[] params);

    /**
     * 查询Hql
     * @param hql
     * @return 返回查询结果，带实体结构
     */
    List<T> findByHql(String hql);

    /**
     * 查询HqL
     * @param hql
     * @param params 查询参数
     * @return 返回查询结果，带实体结构
     */
    List<T> findByHql(String hql,Object[] params);

    /**
     * 执行Hql
     * @param hql
     * @return 返回影响的结果数
     */
    int execByHql(String hql);

    /**
     * 执行Hql
     * @param hql
     * @param params 参数
     * @return 返回影响的结果数
     */
    int execByHql(String hql,Object[] params);

    //通过SQL语句查询

    /**
     * 查询SQL
     * @param sql
     * @return 返回查询结果
     */
    List selectBySql(String sql);

    /**
     * 查询SQL
     * @param sql
     * @param params
     * @return 返回查询结果
     */
    List selectBySql(String sql,Object[] params);

    /**
     * 查询SQL
     * @param sql
     * @return 返回查询结果，带实体结构
     */
    List<T> QueryBySql(String sql);

    /**
     * 查询SQL
     * @param sql
     * @param params 查询参数
     * @return 返回查询结果，带实体结构
     */
    List<T> QueryBySql(String sql,Object[] params);

    /**
     * 执行SQL
     * @param sql
     * @return 返回影响的结果数
     */
    int execBySql(String sql);

    /**
     * 执行SQL
     * @param sql
     * @param params 参数
     * @return 返回影响的结果数
     */
    int execBySql(String sql,Object[] params);



}